home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / bits / stdio2.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  13KB  |  375 lines

  1. /* Checking macros for stdio functions.
  2.    Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
  3.    This file is part of the GNU C Library.
  4.  
  5.    The GNU C Library is free software; you can redistribute it and/or
  6.    modify it under the terms of the GNU Lesser General Public
  7.    License as published by the Free Software Foundation; either
  8.    version 2.1 of the License, or (at your option) any later version.
  9.  
  10.    The GNU C Library is distributed in the hope that it will be useful,
  11.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.    Lesser General Public License for more details.
  14.  
  15.    You should have received a copy of the GNU Lesser General Public
  16.    License along with the GNU C Library; if not, write to the Free
  17.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.    02111-1307 USA.  */
  19.  
  20. #ifndef _STDIO_H
  21. # error "Never include <bits/stdio2.h> directly; use <stdio.h> instead."
  22. #endif
  23.  
  24. extern int __sprintf_chk (char *__restrict __s, int __flag, size_t __slen,
  25.               __const char *__restrict __format, ...) __THROW;
  26. extern int __vsprintf_chk (char *__restrict __s, int __flag, size_t __slen,
  27.                __const char *__restrict __format,
  28.                _G_va_list __ap) __THROW;
  29.  
  30. #ifdef __va_arg_pack
  31. __extern_always_inline int
  32. __NTH (sprintf (char *__restrict __s, __const char *__restrict __fmt, ...))
  33. {
  34.   return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
  35.                   __bos (__s), __fmt, __va_arg_pack ());
  36. }
  37. #elif !defined __cplusplus
  38. # define sprintf(str, ...) \
  39.   __builtin___sprintf_chk (str, __USE_FORTIFY_LEVEL - 1, __bos (str), \
  40.                __VA_ARGS__)
  41. #endif
  42.  
  43. __extern_always_inline int
  44. __NTH (vsprintf (char *__restrict __s, __const char *__restrict __fmt,
  45.          _G_va_list __ap))
  46. {
  47.   return __builtin___vsprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
  48.                    __bos (__s), __fmt, __ap);
  49. }
  50.  
  51. #if defined __USE_BSD || defined __USE_ISOC99 || defined __USE_UNIX98
  52.  
  53. extern int __snprintf_chk (char *__restrict __s, size_t __n, int __flag,
  54.                size_t __slen, __const char *__restrict __format,
  55.                ...) __THROW;
  56. extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag,
  57.                 size_t __slen, __const char *__restrict __format,
  58.                 _G_va_list __ap) __THROW;
  59.  
  60. # ifdef __va_arg_pack
  61. __extern_always_inline int
  62. __NTH (snprintf (char *__restrict __s, size_t __n,
  63.          __const char *__restrict __fmt, ...))
  64. {
  65.   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
  66.                    __bos (__s), __fmt, __va_arg_pack ());
  67. }
  68. # elif !defined __cplusplus
  69. #  define snprintf(str, len, ...) \
  70.   __builtin___snprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, __bos (str), \
  71.                 __VA_ARGS__)
  72. # endif
  73.  
  74. __extern_always_inline int
  75. __NTH (vsnprintf (char *__restrict __s, size_t __n,
  76.           __const char *__restrict __fmt, _G_va_list __ap))
  77. {
  78.   return __builtin___vsnprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
  79.                     __bos (__s), __fmt, __ap);
  80. }
  81.  
  82. #endif
  83.  
  84. #if __USE_FORTIFY_LEVEL > 1
  85.  
  86. extern int __fprintf_chk (FILE *__restrict __stream, int __flag,
  87.               __const char *__restrict __format, ...);
  88. extern int __printf_chk (int __flag, __const char *__restrict __format, ...);
  89. extern int __vfprintf_chk (FILE *__restrict __stream, int __flag,
  90.                __const char *__restrict __format, _G_va_list __ap);
  91. extern int __vprintf_chk (int __flag, __const char *__restrict __format,
  92.               _G_va_list __ap);
  93.  
  94. # ifdef __va_arg_pack
  95. __extern_always_inline int
  96. fprintf (FILE *__restrict __stream, __const char *__restrict __fmt, ...)
  97. {
  98.   return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
  99.             __va_arg_pack ());
  100. }
  101.  
  102. __extern_always_inline int
  103. printf (__const char *__restrict __fmt, ...)
  104. {
  105.   return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
  106. }
  107. # elif !defined __cplusplus
  108. #  define printf(...) \
  109.   __printf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
  110. #  define fprintf(stream, ...) \
  111.   __fprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
  112. # endif
  113.  
  114. __extern_always_inline int
  115. vprintf (__const char *__restrict __fmt, _G_va_list __ap)
  116. {
  117. #ifdef __USE_EXTERN_INLINES
  118.   return __vfprintf_chk (stdout, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
  119. #else
  120.   return __vprintf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __ap);
  121. #endif
  122. }
  123.  
  124. __extern_always_inline int
  125. vfprintf (FILE *__restrict __stream,
  126.       __const char *__restrict __fmt, _G_va_list __ap)
  127. {
  128.   return __vfprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
  129. }
  130.  
  131. # ifdef __USE_GNU
  132.  
  133. extern int __asprintf_chk (char **__restrict __ptr, int __flag,
  134.                __const char *__restrict __fmt, ...)
  135.      __THROW __attribute__ ((__format__ (__printf__, 3, 4))) __wur;
  136. extern int __vasprintf_chk (char **__restrict __ptr, int __flag,
  137.                 __const char *__restrict __fmt, _G_va_list __arg)
  138.      __THROW __attribute__ ((__format__ (__printf__, 3, 0))) __wur;
  139. extern int __dprintf_chk (int __fd, int __flag, __const char *__restrict __fmt,
  140.               ...) __attribute__ ((__format__ (__printf__, 3, 4)));
  141. extern int __vdprintf_chk (int __fd, int __flag,
  142.                __const char *__restrict __fmt, _G_va_list __arg)
  143.      __attribute__ ((__format__ (__printf__, 3, 0)));
  144. extern int __obstack_printf_chk (struct obstack *__restrict __obstack,
  145.                  int __flag, __const char *__restrict __format,
  146.                  ...)
  147.      __THROW __attribute__ ((__format__ (__printf__, 3, 4)));
  148. extern int __obstack_vprintf_chk (struct obstack *__restrict __obstack,
  149.                   int __flag,
  150.                   __const char *__restrict __format,
  151.                   _G_va_list __args)
  152.      __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
  153.  
  154. #  ifdef __va_arg_pack
  155. __extern_always_inline int
  156. __NTH (asprintf (char **__restrict __ptr, __const char *__restrict __fmt, ...))
  157. {
  158.   return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt,
  159.              __va_arg_pack ());
  160. }
  161.  
  162. __extern_always_inline int
  163. __NTH (__asprintf (char **__restrict __ptr, __const char *__restrict __fmt,
  164.            ...))
  165. {
  166.   return __asprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt,
  167.              __va_arg_pack ());
  168. }
  169.  
  170. __extern_always_inline int
  171. dprintf (int __fd, __const char *__restrict __fmt, ...)
  172. {
  173.   return __dprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt,
  174.             __va_arg_pack ());
  175. }
  176.  
  177. __extern_always_inline int
  178. __NTH (obstack_printf (struct obstack *__restrict __obstack,
  179.                __const char *__restrict __fmt, ...))
  180. {
  181.   return __obstack_printf_chk (__obstack, __USE_FORTIFY_LEVEL - 1, __fmt,
  182.                    __va_arg_pack ());
  183. }
  184. #  elif !defined __cplusplus
  185. #   define asprintf(ptr, ...) \
  186.   __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
  187. #   define __asprintf(ptr, ...) \
  188.   __asprintf_chk (ptr, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
  189. #   define dprintf(fd, ...) \
  190.   __dprintf_chk (fd, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
  191. #   define obstack_printf(obstack, ...) \
  192.   __obstack_printf_chk (obstack, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
  193. #  endif
  194.  
  195. __extern_always_inline int
  196. __NTH (vasprintf (char **__restrict __ptr, __const char *__restrict __fmt,
  197.           _G_va_list __ap))
  198. {
  199.   return __vasprintf_chk (__ptr, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
  200. }
  201.  
  202. __extern_always_inline int
  203. vdprintf (int __fd, __const char *__restrict __fmt, _G_va_list __ap)
  204. {
  205.   return __vdprintf_chk (__fd, __USE_FORTIFY_LEVEL - 1, __fmt, __ap);
  206. }
  207.  
  208. __extern_always_inline int
  209. __NTH (obstack_vprintf (struct obstack *__restrict __obstack,
  210.             __const char *__restrict __fmt, _G_va_list __ap))
  211. {
  212.   return __obstack_vprintf_chk (__obstack, __USE_FORTIFY_LEVEL - 1, __fmt,
  213.                 __ap);
  214. }
  215.  
  216. # endif
  217.  
  218. #endif
  219.  
  220. extern char *__gets_chk (char *__str, size_t) __wur;
  221. extern char *__REDIRECT (__gets_warn, (char *__str), gets)
  222.      __wur __warnattr ("please use fgets or getline instead, gets can't "
  223.                "specify buffer size");
  224.  
  225. __extern_always_inline __wur char *
  226. gets (char *__str)
  227. {
  228.   if (__bos (__str) != (size_t) -1)
  229.     return __gets_chk (__str, __bos (__str));
  230.   return __gets_warn (__str);
  231. }
  232.  
  233. extern char *__fgets_chk (char *__restrict __s, size_t __size, int __n,
  234.               FILE *__restrict __stream) __wur;
  235. extern char *__REDIRECT (__fgets_alias,
  236.              (char *__restrict __s, int __n,
  237.               FILE *__restrict __stream), fgets) __wur;
  238. extern char *__REDIRECT (__fgets_chk_warn,
  239.              (char *__restrict __s, size_t __size, int __n,
  240.               FILE *__restrict __stream), __fgets_chk)
  241.      __wur __warnattr ("fgets called with bigger size than length "
  242.                "of destination buffer");
  243.  
  244. __extern_always_inline __wur char *
  245. fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
  246. {
  247.   if (__bos (__s) != (size_t) -1)
  248.     {
  249.       if (!__builtin_constant_p (__n) || __n <= 0)
  250.     return __fgets_chk (__s, __bos (__s), __n, __stream);
  251.  
  252.       if ((size_t) __n > __bos (__s))
  253.     return __fgets_chk_warn (__s, __bos (__s), __n, __stream);
  254.     }
  255.   return __fgets_alias (__s, __n, __stream);
  256. }
  257.  
  258. extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen,
  259.                size_t __size, size_t __n,
  260.                FILE *__restrict __stream) __wur;
  261. extern size_t __REDIRECT (__fread_alias,
  262.               (void *__restrict __ptr, size_t __size,
  263.                size_t __n, FILE *__restrict __stream),
  264.               fread) __wur;
  265. extern size_t __REDIRECT (__fread_chk_warn,
  266.               (void *__restrict __ptr, size_t __ptrlen,
  267.                size_t __size, size_t __n,
  268.                FILE *__restrict __stream),
  269.               __fread_chk)
  270.      __wur __warnattr ("fread called with bigger size * nmemb than length "
  271.                "of destination buffer");
  272.  
  273. __extern_always_inline __wur size_t
  274. fread (void *__restrict __ptr, size_t __size, size_t __n,
  275.        FILE *__restrict __stream)
  276. {
  277.   if (__bos0 (__ptr) != (size_t) -1)
  278.     {
  279.       if (!__builtin_constant_p (__size)
  280.       || !__builtin_constant_p (__n)
  281.       || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
  282.     return __fread_chk (__ptr, __bos0 (__ptr), __size, __n, __stream);
  283.  
  284.       if (__size * __n > __bos0 (__ptr))
  285.     return __fread_chk_warn (__ptr, __bos0 (__ptr), __size, __n, __stream);
  286.     }
  287.   return __fread_alias (__ptr, __size, __n, __stream);
  288. }
  289.  
  290. #ifdef __USE_GNU
  291. extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size,
  292.                    int __n, FILE *__restrict __stream) __wur;
  293. extern char *__REDIRECT (__fgets_unlocked_alias,
  294.              (char *__restrict __s, int __n,
  295.               FILE *__restrict __stream), fgets_unlocked) __wur;
  296. extern char *__REDIRECT (__fgets_unlocked_chk_warn,
  297.              (char *__restrict __s, size_t __size, int __n,
  298.               FILE *__restrict __stream), __fgets_unlocked_chk)
  299.      __wur __warnattr ("fgets_unlocked called with bigger size than length "
  300.                "of destination buffer");
  301.  
  302. __extern_always_inline __wur char *
  303. fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream)
  304. {
  305.   if (__bos (__s) != (size_t) -1)
  306.     {
  307.       if (!__builtin_constant_p (__n) || __n <= 0)
  308.     return __fgets_unlocked_chk (__s, __bos (__s), __n, __stream);
  309.  
  310.       if ((size_t) __n > __bos (__s))
  311.     return __fgets_unlocked_chk_warn (__s, __bos (__s), __n, __stream);
  312.     }
  313.   return __fgets_unlocked_alias (__s, __n, __stream);
  314. }
  315. #endif
  316.  
  317. #ifdef __USE_MISC
  318. # undef fread_unlocked
  319. extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen,
  320.                     size_t __size, size_t __n,
  321.                     FILE *__restrict __stream) __wur;
  322. extern size_t __REDIRECT (__fread_unlocked_alias,
  323.               (void *__restrict __ptr, size_t __size,
  324.                size_t __n, FILE *__restrict __stream),
  325.               fread_unlocked) __wur;
  326. extern size_t __REDIRECT (__fread_unlocked_chk_warn,
  327.               (void *__restrict __ptr, size_t __ptrlen,
  328.                size_t __size, size_t __n,
  329.                FILE *__restrict __stream),
  330.               __fread_unlocked_chk)
  331.      __wur __warnattr ("fread_unlocked called with bigger size * nmemb than "
  332.                "length of destination buffer");
  333.  
  334. __extern_always_inline __wur size_t
  335. fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n,
  336.         FILE *__restrict __stream)
  337. {
  338.   if (__bos0 (__ptr) != (size_t) -1)
  339.     {
  340.       if (!__builtin_constant_p (__size)
  341.       || !__builtin_constant_p (__n)
  342.       || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)))
  343.     return __fread_unlocked_chk (__ptr, __bos0 (__ptr), __size, __n,
  344.                      __stream);
  345.  
  346.       if (__size * __n > __bos0 (__ptr))
  347.     return __fread_unlocked_chk_warn (__ptr, __bos0 (__ptr), __size, __n,
  348.                       __stream);
  349.     }
  350.  
  351. # ifdef __USE_EXTERN_INLINES
  352.   if (__builtin_constant_p (__size)
  353.       && __builtin_constant_p (__n)
  354.       && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2))
  355.       && __size * __n <= 8)
  356.     {
  357.       size_t __cnt = __size * __n;
  358.       char *__cptr = (char *) __ptr;
  359.       if (__cnt == 0)
  360.     return 0;
  361.  
  362.       for (; __cnt > 0; --__cnt)
  363.     {
  364.       int __c = _IO_getc_unlocked (__stream);
  365.       if (__c == EOF)
  366.         break;
  367.       *__cptr++ = __c;
  368.     }
  369.       return (__cptr - (char *) __ptr) / __size;
  370.     }
  371. # endif
  372.   return __fread_unlocked_alias (__ptr, __size, __n, __stream);
  373. }
  374. #endif
  375.